import axios from 'axios'
import {router} from "../router";
import {ElMessage} from 'element-plus'
import {TOKEN_NAME_KEY,TOKEN_VALUE_KEY} from '../constant/constant.ts'
import {isPrimitive} from './utils.ts'

//service.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
axios.defaults.headers["Content-Type"] = "application/x-www-form-urlencoded";

// 创建axios实例
const service = axios.create({
    // axios中请求配置有baseURL选项，表示请求URL公共部分
    baseURL:  import.meta.env.VITE_HTTP_BASE_URL,
    // 超时
    timeout: 100000/*,
    transformRequest: [function (data, headers) {
        // 检查数据是否为 FormData 类型
        if (Object.prototype.toString.call(data) === '[object FormData]') {
            // 自定义处理，例如添加额外的字段或者修改 Content-Type
            // 注意：通常不需要手动设置 Content-Type，因为 FormData 会自动设置
            // 但如果你有特殊需求，可以手动设置
            headers['Content-Type'] = 'multipart/form-data; boundary=' + data.getBoundary();
            return data; // 直接返回 FormData 对象
        }
        headers['Content-Type'] = 'application/x-www-form-urlencoded';
        // 对于非 FormData 数据，可以进行其他转换或处理
        return transformData(data);
    }]*/
});

service.interceptors.request.use(
    config => {
        const  tokenName = localStorage.getItem(TOKEN_NAME_KEY);
        const  tokenValue = localStorage.getItem(TOKEN_VALUE_KEY);
        if(tokenName != '' && tokenName != undefined && tokenValue != '' && tokenValue != undefined){
            config.headers[tokenName] = tokenValue;
        }
        for(const key in config.data){
            if(isPrimitive(config.data[key])){
                continue;
            }
            config.data[key] = JSON.stringify(config.data[key]);
        }
        return config;
    },
    error => {
        console.log("request",error);
        Promise.reject(error);
    }
);

service.interceptors.response.use(
    response  =>{
      //  response.headers;
        const loginStatus = response.data.code || 1;
        if(loginStatus == -2){//session过期
            console.log("-------登陆过期--------------");
            ElMessage.info("登陆过期");
            router.push("/login");
        }
        return response;
    },
    error => {
        // 处理响应错误
        console.log("response",error);
        return Promise.reject(error);
    }
)

function transformData(data:any) {
    let ret = "";
    for (let it in data) {
        ret += encodeURIComponent(it) + "=" + encodeURIComponent(data[it]) + "&";
    }
    return ret;
}

export default service;